package projeto.comercial.gerenciarservico.cdp;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;

import nucleo.comuns.util.UtilitarioSerializacao;

import plataforma.base.cdp.IObjetoComArquivo;
import plataforma.base.cdp.IObjetoComListaArquivo;
import plataforma.base.cdp.ObjetoPersistente;
import projeto.administrativo.colaboradorexterno.cdp.Informacao;
import projeto.administrativo.servico.cdp.KServico;
import projeto.comercial.cliente.cdp.Cliente;

@Entity
public class Servico  extends ObjetoPersistente implements IObjetoComListaArquivo{
	
	private static final long serialVersionUID = UtilitarioSerializacao.getIDSerializacao();
	
	
	Date dataPrevistaConclusao;
	Date dataConclusao;
	Cliente cliente;	
	SituacaoServico situacao;	
	Set<Informacao> informacoes= new HashSet<Informacao>();
	Set<Atividade> atividades = new HashSet<Atividade>();
	KServico kservico;
	
	private BigDecimal valorVenda;
	private BigDecimal valorDesconto;
	private BigDecimal valorFinal;

	
	
	public BigDecimal getValorFinal() {
		return valorFinal;
	}

	public void setValorFinal(BigDecimal valorFinal) {
		this.valorFinal = valorFinal;
	}

	@ManyToOne(fetch=FetchType.LAZY)
	public KServico getKservico() {
		return kservico;
	}

	public void setKservico(KServico kservico) {
		this.kservico = kservico;
	}

	public Servico(){
		situacao = situacao.PLANEJAMENTO;
		
	}
	public BigDecimal getValorDesconto() {
		return valorDesconto;
	}

	public void setValorDesconto(BigDecimal valorDesconto) {
		this.valorDesconto = valorDesconto;
	}
	
	public BigDecimal getValorVenda() {
		return valorVenda;
	}


	public void setValorVenda(BigDecimal valorVenda) {
		this.valorVenda = valorVenda;
	}

	
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@OrderBy("data")
	public Set<Informacao> getInformacoes() {
		return informacoes;
	}


	public void setInformacoes(Set<Informacao> informacoes) {
		this.informacoes = informacoes;
	}
	
	//Avaliacao do cliente


	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,orphanRemoval=true)
	public Set<Atividade> getAtividades() {
		return atividades;
	}

	public void setAtividades(Set<Atividade> atividades) {
		this.atividades = atividades;
	}

	public Date getDataPrevistaConclusao() {
		return dataPrevistaConclusao;
	}

	public void setDataPrevistaConclusao(Date dataPrevistaConclusao) {
		this.dataPrevistaConclusao = dataPrevistaConclusao;
	}

	public Date getDataConclusao() {
		return dataConclusao;
	}

	public void setDataConclusao(Date dataConclusao) {
		this.dataConclusao = dataConclusao;
	}

	@ManyToOne(fetch=FetchType.LAZY)
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public SituacaoServico getSituacao() {
		return situacao;
	}

	public void setSituacao(SituacaoServico situacao) {
		this.situacao = situacao;
	}

	@Override
	public Set recuperarArquivos() {

		return getInformacoes();
	}
	

}
